package cn.cxq.learning.tree;

/**
 * 剑指offer
 * 平衡二叉树
 * 时间限制：C/C++ 1秒，其他语言2秒 空间限制：C/C++ 64M，其他语言128M 热度指数：398644
 * 本题知识点： 树 dfs
 *  算法知识视频讲解
 * 题目描述
 * 输入一棵二叉树，判断该二叉树是否是平衡二叉树。
 * 在这里，我们只需要考虑其平衡性，不需要考虑其是不是排序二叉树
 * 平衡二叉树（Balanced Binary Tree），具有以下性质：它是一棵空树或它的左右两个子树的高度差的绝对值不超过1，并且左右两个子树都是一棵平衡二叉树。
 * 示例1
 * 输入
 * 复制
 * {1,2,3,4,5,6,7}
 * 返回值
 * 复制
 * true
 */
public class IsBalanced {

    public boolean IsBalanced_Solution(TreeNode root) {
        if (root == null) {
            return true;
        }

        if (Math.abs(treeDepth(root.left)-treeDepth(root.right)) <= 1) {
            return true;
        } else {
            return false;
        }
    }

    private int treeDepth(TreeNode treeNode) {

        if (treeNode == null) {
            return 0;
        }

        return Math.max(treeDepth(treeNode.left),treeDepth(treeNode.right)) + 1;
    }
}
